# -*- coding: utf-8 -*-
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者：cacho_37967865
#博客：https://blog.csdn.net/sinat_37967865
#文件：random_data.py
#日期：2019-09-02
#备注：多种随机数生成方法   
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

import random

# 1. 生成随机小数
def get_random():
    data1 = random.random()
    data2 = random.uniform(0,1)
    print("随机大于0且小于1之间的小数：",data1)
    print("随机一个大于N小于M的小数：",data2)


# 2. 生成随机整数
def get_randint():
    data1 = random.randint(1,5)
    data2 = random.randrange(1,10,2)
    data3 = random.randrange(2, 10, 2)
    print("随机一个大于等于1且小于等于5的整数：",data1)
    print("随机一个大于等于1且小于10之间的奇数，其中2表示递增基数：",data2)
    print("随机一个大于等于1且小于10之间的偶数，其中1表示递增基数：", data3)


# 3.1 拿指定列表中数据生成不重复随机数
def get_dif_list(list,num):
    data2 = random.sample(list,num)
    #print("从列表随机选择N个数：", data2)          # 拿出来的数不会重复，而且数量要小于等于列表长度
    return data2

# 3.2 拿指定列表中数据生成可重复随机数
def get_from_list(list,num):
    data1 = random.choice(list)
    #print("从列表随机选择数：",data1)
    #random.shuffle(list)
    #print("random.shuffle(list)打乱列表的顺序：", list)
    return data1


# 4. 获取纯数字可重复随机数
def get_verifyCode(n):
    codes = []
    for i in range(n):
        num = str(random.randint(0,9))
        codes.append(num)
    code = ''.join(codes)
    #print("生成N位数的数字随机数，可重复：",code)
    return(code)


# 5. 获取纯数字不可重复随机数
def get_difCode(n):
    codes = []
    for i in range(10):
        codes.append(str(i))
    code = random.sample(codes, n)
    code = ''.join(code)
    print("生成N位数的数字随机数，不可重复：",code)
    return(code)


# 6. 获取数字和字母组合的随机数，可重复
def get_mixCode(n):
    codes = []
    temp_code = []
    for i in range(10):
        codes.append(str(i))
    for i in range(97,123):
        codes.append(chr(i))                           # 26个小写英文字母
    for i in range(97,123):
        codes.append(chr(i).upper())                   # 26个大写英文字母
    for i in range(n):
        n_code = random.choice(codes)
        temp_code.append(n_code)
    code = ''.join(temp_code)
    #print("生成N位数的数字随机数，可重复：",code)
    return(code)


# 7. 获取数字和字母组合的随机数，不可重复
def get_mix_difCode(n):
    codes = []
    for i in range(10):
        codes.append(str(i))
    for i in range(97,123):
        codes.append(chr(i))                           # 26个小写英文字母
    for i in range(97,123):
        codes.append(chr(i).upper())                   # 26个大写英文字母
    code = random.sample(codes, n)
    code = ''.join(code)
    #print("生成N位数的数字随机数，不可重复：",code)
    return(code)


# 8. 获取数字和大写字母组合的随机数，可重复
def get_mixCode_upper(n):
    codes = []
    temp_code = []
    for i in range(10):
        codes.append(str(i))
    for i in range(97,123):
        codes.append(chr(i).upper())                   # 26个大写英文字母
    for i in range(n):
        n_code = random.choice(codes)
        temp_code.append(n_code)
    code = ''.join(temp_code)
    #print("生成N位数的数字随机数，可重复：",code)
    return(code)

if __name__ == '__main__':
    #get_random()
    #get_randint()
    get_fromList(['123','abc',1,[1,2]],0)
    #get_verifyCode(6)
    #get_difCode(6)
    #get_mixCode(6)


